home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / editgr / winfin.frm < prev    next >
Text File  |  1995-05-08  |  13KB  |  440 lines

  1. VERSION 2.00
  2. Begin Form MainForm 
  3.    BackColor       =   &H00FFFFFF&
  4.    Caption         =   "Edit Grid Demo"
  5.    ClientHeight    =   4335
  6.    ClientLeft      =   360
  7.    ClientTop       =   1695
  8.    ClientWidth     =   6990
  9.    Height          =   5025
  10.    Icon            =   WINFIN.FRX:0000
  11.    Left            =   300
  12.    LinkMode        =   1  'Source
  13.    LinkTopic       =   "Form1"
  14.    ScaleHeight     =   4335
  15.    ScaleWidth      =   6990
  16.    Tag             =   "It's just me, the form"
  17.    Top             =   1065
  18.    Width           =   7110
  19.    Begin PictureBox LowerPanel 
  20.       BackColor       =   &H000000FF&
  21.       Height          =   1000
  22.       Left            =   0
  23.       ScaleHeight     =   975
  24.       ScaleWidth      =   975
  25.       TabIndex        =   0
  26.       Top             =   0
  27.       Width           =   1000
  28.       Begin PictureBox InnerLowerPanel 
  29.          BackColor       =   &H000000FF&
  30.          Height          =   1000
  31.          Left            =   0
  32.          ScaleHeight     =   975
  33.          ScaleWidth      =   975
  34.          TabIndex        =   1
  35.          Top             =   0
  36.          Width           =   1000
  37.       End
  38.    End
  39.    Begin PictureBox TopPanel 
  40.       BackColor       =   &H000000FF&
  41.       Height          =   1000
  42.       Left            =   0
  43.       ScaleHeight     =   975
  44.       ScaleWidth      =   975
  45.       TabIndex        =   2
  46.       Top             =   0
  47.       Width           =   1000
  48.       Begin PictureBox EditPanel 
  49.          BackColor       =   &H000000FF&
  50.          Height          =   1000
  51.          Left            =   0
  52.          ScaleHeight     =   975
  53.          ScaleWidth      =   975
  54.          TabIndex        =   3
  55.          Top             =   0
  56.          Width           =   1000
  57.          Begin TextBox EditCell 
  58.             Alignment       =   1  'Right Justify
  59.             BorderStyle     =   0  'None
  60.             Height          =   240
  61.             Left            =   30
  62.             TabIndex        =   5
  63.             Top             =   60
  64.             Width           =   1545
  65.          End
  66.       End
  67.    End
  68.    Begin PictureBox Grid1 
  69.       BackColor       =   &H000000FF&
  70.       Height          =   1000
  71.       Left            =   0
  72.       ScaleHeight     =   975
  73.       ScaleWidth      =   975
  74.       TabIndex        =   4
  75.       Top             =   0
  76.       Width           =   1000
  77.    End
  78.    Begin Menu mnuFileMenu 
  79.       Caption         =   "&File"
  80.       Begin Menu mnuBegin 
  81.          Caption         =   "&Begin the demo"
  82.       End
  83.       Begin Menu mnuFileExit 
  84.          Caption         =   "E&xit"
  85.       End
  86.    End
  87. End
  88. '------------------------------------------------------------
  89. 'This small VB program demonstrates a method of making the
  90. 'VB GRID.VBX editable.  I've spent some time getting ideas
  91. 'from various sources--some are even my own.  This program
  92. 'is dedicated to all the people that have helped me via
  93. 'CompuServe and America Online.
  94. '
  95. 'You may cut & paste this code however you want.  I hope
  96. 'that you find it useful.  It may not be all that optimized.
  97. 'Also, I didn't spend too much time adding comments.
  98. '
  99. 'I ask nothing more than that if you find this program useful,
  100. 'drop me a line and let me know.  I can be reached at:
  101. 'CompuServe: 76470, 3423
  102. 'America Online: Seattleite
  103. '-------------------------------------------------------------
  104. Option Explicit     'This is a good idea
  105.  
  106. Dim SaveData$
  107. Dim SaveEditRow%
  108. Dim SaveEditCol%
  109. Dim EntryInProgress%
  110.  
  111. Const Fmt$ = "#,##0"
  112. Const KEY_ESCAPE = &H1B
  113. Const KEY_LEFT = &H25
  114. Const KEY_UP = &H26
  115. Const KEY_RIGHT = &H27
  116. Const KEY_DOWN = &H28
  117. Const KEY_F2 = &H71
  118. Const KEY_F9 = &H78
  119.  
  120. Sub EditCell_Change ()
  121.     'Echoes the contents of the editcell into the grid cell
  122.     'If a user clicks on a new cell the if/then prevents the cell from being blanked
  123.     If Grid1.Col = SaveEditCol% And Grid1.Row = SaveEditRow% And EntryInProgress% Then
  124.     Grid1.Text = EditCell.Text
  125.     End If
  126. End Sub
  127.  
  128. Sub EditCell_KeyDown (KeyCode As Integer, Shift As Integer)
  129.     Select Case KeyCode
  130.     Case 13, KEY_DOWN    ' Enter key, down arrow
  131.         'You may want to have an "auto advance" option to
  132.         'decide if an Enter moves the cursor down.
  133.         'This demo just does it.
  134.         KeyCode = 0
  135.         ProcessEditCellEntry (KEY_DOWN)
  136.     Case KEY_UP
  137.         'Test to see if the cursor is at the end of the entry.
  138.         'not so necessary for KEY_UP, but... what the heck.
  139.         If EditCell.SelStart = Len(EditCell.Text) Then
  140.         KeyCode = 0
  141.         ProcessEditCellEntry (KEY_UP)
  142.         End If
  143.     Case KEY_RIGHT
  144.         'Test to see if the cursor is at the end of the entry.
  145.         If EditCell.SelStart = Len(EditCell.Text) Then
  146.         KeyCode = 0
  147.         ProcessEditCellEntry (KEY_RIGHT)
  148.         End If
  149.     Case KEY_LEFT
  150.         'Test to see if the cursor is at the beginning of the entry.
  151.         If EditCell.SelStart = 0 Then
  152.         KeyCode = 0
  153.         ProcessEditCellEntry (KEY_LEFT)
  154.         End If
  155.     End Select
  156. End Sub
  157.  
  158. Sub EditCell_KeyPress (KeyAscii As Integer)
  159.     Select Case KeyAscii
  160.     Case 13    ' Enter key
  161.         KeyAscii = 0
  162.     Case KEY_ESCAPE
  163.         Grid1.Text = SaveData$   'Abandon the edit
  164.         SaveData$ = ""
  165.         EntryInProgress% = False
  166.         EditCell.Text = ""       'Necessary to keep the ProcessEditCellEntry from not kicking in
  167.         EditPanel.Visible = False
  168.         KeyAscii = 0
  169.     Case 42, 43, 45, 46, 47, 48 To 57, 8 '*, +, -, ., /, 0 thru 9, and BACKSPACE
  170.         'These are okay
  171.         'My app only wants to have numbers entered, if you want
  172.         'the ability to handle more than that, expand the case statement.
  173.         '...or just take anything with a case else.
  174.     Case Else
  175.         'The character was something undesirable... make it go away.
  176.         KeyAscii = 0
  177.     End Select
  178. End Sub
  179.  
  180. Sub EditCell_LostFocus ()
  181.     Dim TempRow%
  182.     Dim TempCol%
  183.     
  184.     'Put the data back when the user clicks on another cell
  185.     EntryInProgress% = False
  186.     If EditCell.Text <> "" Then ProcessEditCellEntry (0)
  187. End Sub
  188.  
  189. Function Evaluate# (EditText$, ErrCode)
  190.     Dim Position%
  191.     Dim Operation%
  192.     Dim RightVal#
  193.     Dim LeftVal#
  194.     Dim Balance#
  195.     Dim FirstFlag%
  196.     
  197.     'My thanks to Ethan Winer for this section of code
  198.     'It is mostly adapted from an article by him
  199.     For Position% = 1 To Len(EditText$)
  200.     Operation% = InStr("+-*/", Mid$(EditText$, Position%, 1))
  201.     If Operation% Then
  202.         LeftVal# = Val(EditText$)
  203.         If FirstFlag% Then LeftVal# = Balance#
  204.         If FirstFlag% = False Then
  205.         FirstFlag% = True
  206.         Balance# = 0
  207.         End If
  208.         RightVal# = Val(Mid$(EditText$, Position% + 1))
  209.         
  210.         Select Case Operation%
  211.         Case 1  'addition
  212.             If Position% > 1 Then
  213.             Balance# = LeftVal# + RightVal#
  214.             Else
  215.             Balance# = LeftVal#
  216.             End If
  217.         Case 2  'subtraction
  218.             If Position% > 1 Then
  219.             Balance# = LeftVal# - RightVal#
  220.             Else
  221.             Balance# = LeftVal#
  222.             End If
  223.         Case 3  'multiplication
  224.             Balance# = LeftVal# * RightVal#
  225.         Case 4  'division
  226.             If RightVal# = 0# Then
  227.             ErrCode = 3
  228.             Exit Function
  229.             End If
  230.             Balance# = LeftVal# / RightVal#
  231.         End Select
  232.     End If
  233.     Next Position%
  234.     If FirstFlag% = False Then Balance# = Val(EditText$)
  235.     Evaluate# = Balance#    'Return function result
  236. End Function
  237.  
  238. Sub Form_Resize ()
  239.     If WindowState <> 1 Then
  240.     If MainForm.Width < 6580 Then MainForm.Width = 6580     'Minimum sizes
  241.     If MainForm.Height < 3405 Then MainForm.Height = 3405
  242.     TopPanel.Top = 0
  243.     TopPanel.Left = 0
  244.     TopPanel.Width = ScaleWidth
  245.     LowerPanel.Top = ScaleHeight - LowerPanel.Height
  246.     LowerPanel.Left = 0
  247.     LowerPanel.Width = ScaleWidth
  248.     InnerLowerPanel.Width = LowerPanel.Width - 630
  249.     Grid1.Top = 0 + TopPanel.Height
  250.     Grid1.Left = 0
  251.     Grid1.Width = ScaleWidth
  252.     Grid1.Height = ScaleHeight - TopPanel.Height - LowerPanel.Height
  253.     End If
  254. End Sub
  255.  
  256. Sub Grid1_KeyDown (KeyCode As Integer, Shift As Integer)
  257.     Dim CheckRow%
  258.     Dim Pointer%
  259.     Dim ColFlag%
  260.     Dim Counter%
  261.     Dim SaveCol%
  262.     On Error GoTo Grid1KeyDownError:
  263.  
  264.     Select Case KeyCode
  265.     Case 13, 27
  266.         KeyCode = 0
  267.     Case KEY_F2
  268.         SaveEditRow% = Grid1.Row
  269.         SaveEditCol% = Grid1.Col
  270.